/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.talentos.bo;

import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.TipoHabilidadeDAO;
import br.uniceub.fsw.talentos.dao.HabilidadeDAO;
import br.uniceub.fsw.talentos.vo.TipoHabilidadeVO;
import br.uniceub.fsw.talentos.vo.HabilidadeVO;

/**
 * Business Object da entidade TipoHabilidade. Essa classe é responsável por todos as
 * funcionalidades de negócio relacionadas à entidade.
 * 
 * @author Bruno Schifer Bernardi 2026545/5
 */
public class TipoHabilidadeBO {

    TipoHabilidadeDAO tipoHabilidadeDAO = new TipoHabilidadeDAO();
    HabilidadeDAO habilidadeDAO = new HabilidadeDAO();
    
    /**
     * Valida se já existe um registro do TipoHabilidade no Banco de Dados como verificação para inserção.
     * 
     * @param tipoHabilidade tipoHabilidade a ser verificado.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso o TipoHabilidade 
     * informado não possua nome para a verificação ou já exista um TipoHabilidade com o mesmo nome no banco de dados.
     */
    public void validarVOUnico(TipoHabilidadeVO tipoHabilidade) throws NegocioException {
        
        if(tipoHabilidade.getNoTipoHabilidade() == null || tipoHabilidade.getNoTipoHabilidade().isEmpty())
            throw new NegocioException("Nome do tipo de habilidade não foi informado");
        
        TipoHabilidadeVO tipoHabilidadeExemplo = new TipoHabilidadeVO();
        tipoHabilidadeExemplo.setNoTipoHabilidade(tipoHabilidade.getNoTipoHabilidade());
        
        if(!tipoHabilidadeDAO.consultarPorExemplo(tipoHabilidadeExemplo).isEmpty())
            throw new NegocioException("Já existe um tipo de habilidade de nome " + tipoHabilidade.getNoTipoHabilidade() +
                " na base de dados");
    }
    
    /**
     * Valida a exclusão da entidade
     * 
     * @param tipoHabilidade entidade a ser excluída.
     */
    public void validarExclusao(TipoHabilidadeVO tipoHabilidade) throws NegocioException {
        HabilidadeVO habilidade = new HabilidadeVO();
        habilidade.setCdTipoHabilidade(tipoHabilidade.getIdTipoHabilidade());
        
        if(!habilidadeDAO.consultarPorExemplo(habilidade).isEmpty()) {
            throw new NegocioException("Exclusão inválida. Existem habilidades utilizando esse tipo de habilidade.");
        }
    }
}
